﻿using System;
using System.Collections.Generic;
using System.Linq;

namespace CRM.Database.Model
{
    public class TechnicReport5Collection : AbstractCollection
    {
        /// <summary>
        /// Список элементов отчёта
        /// </summary>
        public List<TechnicReport5> TechnicReport5List
        {
            get { return Entities.TechnicReport5.ToList(); }
        }

        #region Implementation of IGetItem

        /// <summary>
        /// Получение списка элементов
        /// </summary>
        /// <returns>Список элементов</returns>
        public override List<object> GetList()
        {
            return new List<object>(TechnicReport5List);
        }

        /// <summary>
        /// Получение типа текущего элемента
        /// </summary>
        /// <returns></returns>
        protected override Type GetItemType()
        {
            return typeof (TechnicReport5);
        }

        /// <summary>
        /// Получение статического списка для хранения объектов
        /// </summary>
        /// <returns></returns>
        public override object GetStaticCollection()
        {
            throw new NotImplementedException();
        }

        /// <summary>
        /// Получение элемента из коллекции по идентификатору
        /// </summary>
        /// <param name="itemId">Идентификатор</param>
        /// <returns>Элемент</returns>
        public override object GetItemById(int itemId)
        {
            return Entities.TechnicReport5.Find(itemId);
        }

        ///// <summary>
        ///// Получение элемента из коллекции по идентификатору
        ///// </summary>
        ///// <param name="itemId">Идентификатор</param>
        ///// <returns>Элемент</returns>
        //public object GetItemByIdFromDatabase(int itemId)
        //{
        //    return DB.Entities.TechnicReport5.FirstOrDefault(c => c.IdTechnicReport5 == itemId);
        //}

        #endregion

        #region Implementation of IAddDeleteUpdate

        ///// <summary>
        ///// Добавление элемента в коллекцию
        ///// </summary>
        ///// <param name="item">Элемент</param>
        ///// <param name="userLogin">Логин пользователя, который делает изменения</param>
        //public bool Add(object item, string userLogin)
        //{
        //    if (item.GetType() != typeof (TechnicReport5))
        //        return false;
        //    return DB.Add(item, userLogin);
        //}

        ///// <summary>
        ///// Удаление элемента из коллекции
        ///// </summary>
        ///// <param name="item">Элемент</param>
        ///// <returns>Результат удаления</returns>
        //public bool Delete(object item)
        //{
        //    if (item.GetType() != typeof (TechnicReport5))
        //        return false;
        //    return DB.Delete(item);
        //}

        ///// <summary>
        ///// Удаление элемента из коллеции по идентификатору
        ///// </summary>
        ///// <param name="itemId">Идентификатор</param>
        ///// <returns>Результат удаления</returns>
        //public bool DeleteById(int itemId)
        //{
        //    object obj = GetItemById(itemId);
        //    if (obj == null)
        //        return false;
        //    return Delete(obj);
        //}

        /// <summary>
        /// Обновление элемента в коллекции
        /// </summary>
        /// <param name="item">Новый элемент</param>
        /// <param name="userLogin">Логин пользователя, который делает изменения</param>
        /// <returns>Результат операции</returns>
        public bool Update(object item, string userLogin)
        {
            var newItem = (TechnicReport5) item;
            if (newItem == null)
                return false;

            var updateItem = GetItemByIdFromDatabase(newItem.IdTechnicReport5) as TechnicReport5;
            if (updateItem == null)
                return false;

            updateItem.IdTechnicRequest = newItem.IdTechnicRequest;
            updateItem.Field1 = newItem.Field1;
            updateItem.Field2 = newItem.Field2;
            updateItem.Field3 = newItem.Field3;
            updateItem.Field4 = newItem.Field4;
            updateItem.Field5 = newItem.Field5;
            updateItem.Field6 = newItem.Field6;
            updateItem.Field7 = newItem.Field7;
            updateItem.Field8 = newItem.Field8;
            updateItem.Field9 = newItem.Field9;
            updateItem.Field10 = newItem.Field10;
            updateItem.Field11 = newItem.Field11;
            updateItem.Field12 = newItem.Field12;
            updateItem.Field13 = newItem.Field13;
            updateItem.Field14 = newItem.Field14;
            updateItem.Field15 = newItem.Field15;
            updateItem.Field16 = newItem.Field16;
            updateItem.Field17 = newItem.Field17;
            updateItem.Field18 = newItem.Field18;
            updateItem.Field19 = newItem.Field19;
            updateItem.Field20 = newItem.Field20;

            return base.Update(updateItem, userLogin);
        }

        /// <summary>
        /// Обнуление статической коллекции
        /// </summary>
        protected override void SetStaticListToNULL()
        {
            throw new NotImplementedException();
        }

        #endregion

        /// <summary>
        /// Получение элемента по Id заявки
        /// </summary>
        /// <param name="idTechnicRequest"></param>
        /// <returns></returns>
        public TechnicReport5 GetItemByRequestId(int idTechnicRequest)
        {
            return Entities.TechnicReport5.FirstOrDefault(c => c.IdTechnicRequest == idTechnicRequest);
        }
    }
}